/**
* Control de Fases
*
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
* @version Version 1.0
*
*/
/**
* Archivo JavaScript para agregar una nueva habitacion
*
* @version 1.0
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
*
* Creado el : 20/Noviembre/2011
* Actualizado el: 20/Noviembre/2011
*/
/** Las clases se encuentran en {root}/extjs4/src/ */


Ext.require(['*']);
//Ext.ns('Sistema.FrontEnd');
//Ext.Loader.setConfig({enabled:true});


Ext.define('modelFases', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'POST',
		//url : '/roles', //application/controllers/Habitacion.php
		
		api: {
			read: '/fases/view',
			create: '/fases/create',
			save: '/fases/update',
			destroy: '/fases/destroy'
		},
		reader: {				
			type: 'json',
			successProperty: 'success',
			root: 'fases',
			messageProperty: 'message'
		},
		writer: {
			type: 'json',
			writeAllFields: false,
			root: 'fase'
		},
	},
	fields: [
		{type: 'int' , name: 'idFase'},
		{type: 'string', name: 'nombreFase'},
		{type: 'string', name: 'descripFase'},
		{type: 'string', name: 'inicioFase'},
		{type: 'string', name: 'finFase'},
		{type: 'string', name: 'observFase'},
		{type: 'string', name: 'estadoFase'},
		{type: 'string', name: 'ordenFase'}
		]
});

Ext.define('modelUpdateTipos_Items', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		api: {
			read: '/fases/editarFase',
		},
		
		reader: {
			//actionMethods : 'GET',
			type : 'json',
			idProperty : 'idTipo_Item',
			root : 'tipos_items',
			totalProperty : 'totalTipos_Items'
		}
	},
	fields: [
		{type: 'int' , name: 'idTipo_Item'},
		{type: 'string', name: 'nombreTipo_Item'},
		{type: 'string', name: 'descripTipo_Item'},
		{type: 'string', name: 'observTipo_Item'}
	]
}); 

Ext.define('modelFasesTipos_Items', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'GET',
		//url : '/tipos_items/view', application/controllers/Habitacion.php
		
		api: {
			read: '/fases/viewTipoItem',
			create: '/tipos_items/create',
			save: '/fases/updateTipoItem',
			destroy: '/tipos_items/destroy'
		},
		
		reader: {
			//actionMethods : 'GET',
			type : 'json',
			idProperty : 'idTipo_Item',
			root : 'tipos_items',
			totalProperty : 'totalTipos_Items'
		}
	},
	fields: [
		{type: 'int' , name: 'idTipo_Item'},
		{type: 'string', name: 'nombreTipo_Item'},
		{type: 'string', name: 'descripTipo_Item'},
		{type: 'string', name: 'observTipo_Item'}
	]
}); 


Ext.define('FasesLiveSearchGridPanel', {
    extend: 'Ext.ux.LiveSearchGridPanel',
    
    initComponent: function() {
        
        //Ext.Msg.alert('Estoy en el initComponet del live!!!');
        var me = this;
        me.tbar = ['Buscar',{
                 xtype: 'textfield',
                 name: 'searchField',
                 hideLabel: true,
                 width: 200,
                 listeners: {
                     change: {
                         fn: me.onTextFieldChange,
                         scope: this,
                         buffer: 100
                     }
                 }
            }, {
                xtype: 'button',
                text: '<',
                tooltip: 'Anterior',
                handler: me.onPreviousClick,
                scope: me
            },{
                xtype: 'button',
                text: '>',
                tooltip: 'Siguiente',
                handler: me.onNextClick,
                scope: me
            }, '-', {
                xtype: 'checkbox',
                hideLabel: true,
                margin: '0 0 0 4px',
                handler: me.regExpToggle,
                scope: me                
            }, 'Expresión Regular', {
                xtype: 'checkbox',
                hideLabel: true,
                margin: '0 0 0 4px',
                handler: me.caseSensitiveToggle,
                scope: me
            }, 'Detectar Mayúsculas'];
        
        me.callParent(arguments);
    }
});



Ext.define('App.view.AdmFases', {
	extend: 'Ext.panel.Panel',
    alias: 'widget.tabfirst',
    title: 'Administación de Fases',
	layout:'anchor', 

	initComponent: function () {
				
		//para que funcionen los toolTips
        Ext.QuickTips.init();
		
		//store de Fases
		this.store = Ext.create('Ext.data.Store', {
			model : 'modelFases'
			//autoLoad : true
		});
		
		
		this.myIdProyecto = idProyectoAux;
		this.myNombreProyecto = nombreProyectoAux;
				

		this.store.load(
			{
				params:{idProyecto: this.myIdProyecto}
			}
        );
        
        this.estadoProyecto = null;
        
        Ext.Ajax.request(
		{
			url:'/proyectos/viewEstadoProyecto',
			//form:"[STICK FORM ID HERE]",
			method:'GET',
			scope : this,
			params: { idProyecto: this.myIdProyecto},
			success: function(response, opts) {
				//alert("successfull");
				obj = Ext.decode(response.responseText)	
				this.estadoProyecto = obj.estado
			},
			failure:function(res,opt) {
				alert("request failed");
			}
		});
		
		this.idBtonCrearFase = 'btn_grid_agregar_fase' + this.myIdProyecto;
		this.idBtonEditarFase = 'btn_grid_editar_fase' + this.myIdProyecto;
		this.idBtonEliminarFase = 'btn_grid_eliminar_fase' + this.myIdProyecto;
		
		//toolBar
		this.Tblgrid = Ext.create('Ext.toolbar.Toolbar',{
			items : [
				{
					xtype : 'button',
					id : this.idBtonCrearFase,
					itemId : this.idBtonCrearFase,
					text : 'Agregar Fase',
					iconCls : 'icon_button_add',
					disabled : false,
					tooltip : 'Agregar un Nueva Fase',
					scope : this,
					handler : this.AgregarRecordSelect
				},{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : this.idBtonEditarFase,
					itemId : this.idBtonEditarFase,
					text : 'Editar Registro',
					iconCls : 'icon_btn_grid_editar_fase',
					disabled : true,
					tooltip : 'Editar el registro seleccionado',
					scope : this,
					handler : this.EditRecordSelect
				},{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : this.idBtonEliminarFase,
					itemId : this.idBtonEliminarFase,
					text : 'Eliminar Registro',
					iconCls : 'icon_btn_grid_eliminar_fase',
					disabled : true,
					tooltip : 'Eliminar el registro seleccionado',
					scope : this,
					handler : this.DeleteRecordSelect
				},{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : 'btn_grid_cambiar_fase',
					itemId : 'btn_grid_cambiar_fase',
					text : 'Cambiar Orden',
					//iconCls : 'icon_btn_grid_eliminar_usuario',
					disabled : true,
					tooltip : 'Cambiar el Orden de la Fase',
					scope : this,
					handler : this.CambiarOrdenFaseRecordSelect
				}/*,{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : 'btn_grid_finalizar_fase',
					itemId : 'btn_grid_finalizar_fase',
					text : 'Finalizar Fase',
					//iconCls : 'icon_btn_grid_eliminar_usuario',
					disabled : true,
					tooltip : 'Terminar la Fase',
					scope : this,
					handler : this.FinalizarFaseRecordSelect
				},{
					xtype : 'tbseparator'
				},{
					xtype : 'button',
					id : 'btn_grid_linea_base',
					itemId : 'btn_grid_linea_base',
					text : 'Crear Linea Base',
					//iconCls : 'icon_btn_grid_eliminar_usuario',
					disabled : true,
					tooltip : 'Crear una Linea Base para la Fase',
					scope : this,
					handler : this.treeLineaBase
				},{
					xtype : 'tbseparator'
				}*/
			]
		});
		

		
		this.grid = Ext.create('FasesLiveSearchGridPanel',{
			title : 'Lista de Fases : ' + this.myNombreProyecto,
			frame : true,
			store : this.store,
			stripeRows : true,
			columnLines: true,
			loadMask : true,
			//width : 550,
			//height : 400,
			anchor: '100% 90%', 
			dockedItems : [this.Tblgrid,
				Ext.create('Ext.ux.StatusBar', {
				defaultText: this.defaultStatusText,
				name: 'searchStatusBar'
				})
			],
			columns : [
				Ext.create('Ext.grid.RowNumberer'),
				{
					text : "idFase",
					dataIndex : 'idFase',
					hidden : true
				},{ 
					text : "Nro Orden",
					dataIndex : "ordenFase",
					sortable : true,
					resizable : false,
					width : 60
				},{ 
					text : "Fase",
					dataIndex : "nombreFase",
					sortable : false,
					resizable : false,
					width : 220
				},{
					text : "Descripción",
					dataIndex : "descripFase",
					sortable : false,
					resizable : false,
					width : 230
				},{
					text : "Fecha de Inicio",
					dataIndex : "inicioFase",
					sortable : false,
					resizable : false,
					width : 120
				},{
					text : "Fecha de Fin",
					dataIndex : "finFase",
					sortable : false,
					resizable : false,
					width : 120
				},{
					text : "Observación",
					dataIndex : "observFase",
					sortable : false,
					resizable : false,
					width : 230
				},{
					text : "Estado",
					dataIndex : "estadoFase",
					sortable : false,
					resizable : false,
					width : 120
				}
			],
			listeners : {
				scope : this, 
				'selectionchange': function(view, records) {
					//Activar los botones del DataGrid
					//La propiedad #btn_grid_editar corresponde al itemId asignado al item en el componente Toolbar del DataGrid
					if (this.grid.getSelectionModel().getSelection()[0] != null){
						if (this.estadoProyecto == 'PENDIENTE'){
						
							this.grid.down('#'+this.idBtonCrearFase).setDisabled(!records.length);
							this.grid.down('#'+this.idBtonEditarFase).setDisabled(!records.length);
							this.grid.down('#'+this.idBtonEliminarFase).setDisabled(!records.length);
							this.grid.down('#btn_grid_cambiar_fase').setDisabled(!records.length);
							/*this.grid.down('#btn_grid_finalizar_fase').setDisabled(!records.length);
							this.grid.down('#btn_grid_linea_base').setDisabled(!records.length);*/
			
						}
						else if (this.estadoProyecto == 'ACTIVO'){
								this.grid.down('#'+this.idBtonCrearFase).setDisabled(records.length);
								this.grid.down('#'+this.idBtonEditarFase).setDisabled(!records.length);
								this.grid.down('#'+this.idBtonEliminarFase).setDisabled(records.length);
						}
					}
				}
			},
			bbar: Ext.create('Ext.PagingToolbar', {
				store : this.store,
				displayInfo : true,
				displayMsg : 'Mostrando registros {0} - {1} de {2}',
				emptyMsg : "Sin registros para mostrar"
			})
		});
		
		
		this.items = [this.grid];
        this.callParent(arguments);
        
	},
	
	//métodos que despliega el popUp para agregar
	AgregarRecordSelect : function(){
		
		//DataStore para el ComboBox de la lista de tipos de item
		var dsCmbTipos_Items = Ext.create('Ext.data.Store', {
			model : 'modelFasesTipos_Items'
			//autoLoad : true
		});

		dsCmbTipos_Items.load({params: {idProyecto: this.myIdProyecto}});
		
		//ComboBox para mostrar tipos de items disponibles
		var cmbTipos_Items = Ext.create('Ext.ux.form.field.BoxSelect', {

			fieldLabel: 'Tipo de Item',
			name : 'cmb_tipos_items',
			id: 'id_cmbx_tipos_items',
			displayField: 'nombreTipo_Item',
			width: 494,
			//height: 50,
			//labelWidth: 130,
			store: dsCmbTipos_Items,
			queryMode: 'local',
			emptyText: 'Seleccione el Tipo de Item a ser asignado',
			valueField: 'idTipo_Item',
			multiSelect :true,
			allowBlank : true
			
		});
		
		
		// Add the additional 'advanced' VTypes
		Ext.apply(Ext.form.field.VTypes, {
			daterange: function(val, field) {
				var date = field.parseDate(val);

				if (!date) {
					return false;
				}
				if (field.startDateField && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) {
					var start = field.up('form').down('#' + field.startDateField);
					start.setMaxValue(date);
					start.validate();
					this.dateRangeMax = date;
				}
				else if (field.endDateField && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) {
					var end = field.up('form').down('#' + field.endDateField);
					end.setMinValue(date);
					end.validate();
					this.dateRangeMin = date;
				}
				/*
				 * Always return true since we're only using this vtype to set the
				 * min/max allowed values (these are tested for after the vtype test)
				 */
				return true;
			},

			daterangeText: 'La Fecha de Fin debe ser mayor que el de Inicio',

			
		});	
		
		//destruimos el componente Fecha que se oculto
		if(Ext.getCmp('inicioFaseAdd_fase') != null){
			Ext.getCmp('inicioFaseAdd_fase').destroy();	
		}
		if(Ext.getCmp('finFaseAdd_fase') != null){
			Ext.getCmp('finFaseAdd_fase').destroy();	
		}
		
		
		//Creamos el FormPanel que contendra los datos a agregar
		this.FormAddModal = Ext.create('Ext.form.Panel',{
			frame :true,
			title : 'Datos de la Fase',
			bodyStyle :'padding:5px 5px 0',
			width : 530,
			//height : 250,
			autoHeight : true,
			defaultType: 'textfield',
			items: [
				{
					fieldLabel : 'Nombre de la Fase',
					id : 'nombreFaseAdd_fase',
					name : 'nombreFaseAdd_fase',
					anchor : '93%',
					allowBlank : false
				},{
					fieldLabel : 'Descripción',
					id : 'descripFaseAdd_fase',
					name : 'descripFaseAdd_fase',
					anchor : '93%',
					allowBlank : false
				},{	
					xtype: 'datefield',
					fieldLabel : 'Fecha de Inicio',
					id : 'inicioFaseAdd_fase',
					name : 'inicioFaseAdd_fase',
					minValue: new Date(),
					format: 'd-F-Y',
					vtype: 'daterange',
					endDateField: 'finFaseAdd_fase',
					anchor : '93%',
					allowBlank : false
				},{
					xtype: 'datefield',
					fieldLabel : 'Fecha de Fin',
					id : 'finFaseAdd_fase',
					name : 'finFaseAdd_fase',
					format: 'd-F-Y',
					vtype: 'daterange',
					startDateField: 'inicioFaseAdd_fase',
					anchor : '93%',
					allowBlank : false
				},{
					fieldLabel : 'Observacion',
					id : 'observFaseAdd_fase',
					name : 'observFaseAdd_fase',
					anchor : '93%',
					hidden : false,
					allowBlank : true
				},{
					xtype : 'fieldcontainer',
					labelStyle : 'font-weight:bold;padding:0',
					anchor : '90%',
					items: [
						cmbTipos_Items,
					]
				}
			],
			buttons: [
				{
					text : 'Guardar',
					id : 'id_btn_add_guardar_atributo',
					iconCls : 'icon_button_save',
					scope : this,
					handler : this.HandlerGuardarDatosFase
				},{
					text : 'Cancelar',
					id : 'id_btn_add_cancelar_atributo',
					iconCls : 'icon_button_cancel',
					scope : this,
					handler : function(){
						this.WindowFormAddModal.close();
					}
				}
			]
		});
		//Una vez creado el FormPanel lo reseteamos
		this.FormAddModal.getForm().reset();
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		this.WindowFormAddModal = Ext.create('Ext.window.Window',{
			title : 'Agregar Nueva Fase',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 560,
			//height : 300,
			autoHeight : true,
			modal : true,
			//resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'destroy',
			items : [this.FormAddModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormAddModal.show();
		
		
	},
		
	//método que guarda un nuevo atributo
	HandlerGuardarDatosFase:function(){
		//Ext.Msg.alert("Info",this.FormAddModal.getForm().isValid());
		if (this.FormAddModal.getForm().isValid()){
			//Ext.Msg.alert("Info","Pasé la validación");
			var fechaIni = new Date();
				fechaIni = Ext.getCmp('inicioFaseAdd_fase').getValue();
				fechaIni = Ext.util.Format.date(fechaIni,'d-F-Y');
			
			var fechaFin = new Date();
				fechaFin = Ext.getCmp('finFaseAdd_fase').getValue();
				fechaFin = Ext.util.Format.date(fechaFin,'d-F-Y');
			
			var rec = new modelFases({

				nombreFase: Ext.getCmp('nombreFaseAdd_fase').getValue(),
				descripFase: Ext.getCmp('descripFaseAdd_fase').getValue(),
				inicioFase: fechaIni,
				finFase: fechaFin,
				observFase: Ext.getCmp('observFaseAdd_fase').getValue()
			});
			
			
			this.FormAddModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/fases/create', 
				clientValidation : true,
				scope : this,
				params : {
					idProyecto: this.myIdProyecto,
					ids_tipos_items : Ext.JSON.encode(Ext.getCmp('id_cmbx_tipos_items').getValue()),
					fase : Ext.JSON.encode(rec)
				},
				success: function(form, action){
					this.WindowFormAddModal.close();
					this.store.load(
						{
							params:{idProyecto: this.myIdProyecto}
						}
					);
				},
				failure: function(form, action){
					Ext.Msg.alert("Error",action.result);
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
		
	//método asociado al botón de eliminar 
	DeleteRecordSelect : function(){
		Ext.MessageBox.show({
			title : "Información del sistema",
			msg : "¿Realmente desea eliminar el registro seleccionado?",
			buttons : Ext.MessageBox.YESNO,
			icon : Ext.MessageBox.INFO,
			scope : this,
			fn : this.EliminarRegistroSeleccionado,
			width : 400
		});
	},
	
	//método que realiza la eliminación si es que se acepta el popUp
	EliminarRegistroSeleccionado : function(btn){
		if (btn == 'yes') { //btn=='yes'
			//this.WindowAdmAtributos.el.mask('Eliminando datos....Espere por favor...');
			registroSeleccionado = this.grid.getSelectionModel().getSelection()[0].data.idFase;
			Ext.Ajax.request({
				url : '/fases/destroy', //application/controllers/Habitacion.php
				method : 'POST',
				scope : this,
				params : {
					param_idFase : registroSeleccionado,
					idProyecto: this.myIdProyecto
				},
				success: function(response, opts) { //success
					var obj = Ext.JSON.decode(response.responseText);
					if(obj.success==true){
						this.store.load(
							{
								params:{idProyecto: this.myIdProyecto}
							}
						);
						Ext.Msg.alert('Estatus',  obj.msg);
						//this.WindowAdmAtributos.el.unmask();
					}
					else if(obj.success==false){
						//this.WindowAdmAtributos.el.unmask();
							Ext.MessageBox.show({
								title : "Informacion del sistema",
								msg : obj.msg,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR,
								width : 400
							});
					}
					else{
						//this.WindowAdmAtributos.el.unmask();
						Ext.MessageBox.show({
							title : "Informacion del sistema",
							msg : "Mensaje de error alternativo a la eliminacion del registro seleccionado",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					}
				}, //success
				failure: function(response, opts) { //failure
					//this.WindowAdmAtributos.el.unmask();
					var obj = Ext.JSON.decode(response.responseText);
					Ext.MessageBox.show({
						title : "Informacion del sitema",
						msg : "Error de conexion al servidor de la base de datos",
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 400
					});
				} //failure
			});
		}else{
		}
	},
	
	
	//método que muestra el popUp para la edición del registro
	EditRecordSelect : function(){
		
		
		//DataStore para el ComboBox de la lista de tipos de item
		var dsCmbEditarTipos_Items = Ext.create('Ext.data.Store', {
			model : 'modelUpdateTipos_Items'
			//autoLoad : true
		});

		dsCmbEditarTipos_Items.load({params:
										{
											idProyecto: this.myIdProyecto,
											idFase: this.grid.getSelectionModel().getSelection()[0].data.idFase
										}
		});

		//ComboBox para mostrar tipos de items disponibles
		var cmbEditarTipos_Items = Ext.create('Ext.ux.form.field.BoxSelect', {

			fieldLabel: 'Tipo de Item',
			name : 'cmb_tipos_items',
			id: 'id_cmbx_tipos_items',
			displayField: 'nombreTipo_Item',
			width: 494,
			//height: 50,
			//labelWidth: 130,
			store: dsCmbEditarTipos_Items,
			queryMode: 'local',
			emptyText: 'Seleccione el Tipo de Item a ser asignado',
			valueField: 'idTipo_Item',
			multiSelect :true,
			allowBlank : true
			
		});
		
		
		// Add the additional 'advanced' VTypes
		Ext.apply(Ext.form.field.VTypes, {
			daterange: function(val, field) {
				var date = field.parseDate(val);

				if (!date) {
					return false;
				}
				if (field.startDateField && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) {
					var start = field.up('form').down('#' + field.startDateField);
					start.setMaxValue(date);
					start.validate();
					this.dateRangeMax = date;
				}
				else if (field.endDateField && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) {
					var end = field.up('form').down('#' + field.endDateField);
					end.setMinValue(date);
					end.validate();
					this.dateRangeMin = date;
				}
				/*
				 * Always return true since we're only using this vtype to set the
				 * min/max allowed values (these are tested for after the vtype test)
				 */
				return true;
			},

			daterangeText: 'La Fecha de Fin debe ser mayor que el de Inicio',

			
		});	
		
		//destruimos el componente Fecha que se oculto
		if(Ext.getCmp('inicioFaseEdit_fase') != null){
			Ext.getCmp('inicioFaseEdit_fase').destroy();	
		}
		if(Ext.getCmp('finFaseEdit_fase') != null){
			Ext.getCmp('finFaseEdit_fase').destroy();	
		}
		
		
		
		//Creamos el FormPanel que contendra los datos a editar
		this.FormEditModal = Ext.create('Ext.form.Panel',{
			frame :true,
			title : 'Datos del Atributo',
			bodyStyle :'padding:5px 5px 0',
			width : 550,
			//height : 250,
			autoHeight : true,
			defaultType: 'textfield',
			items: [
				{
					id : 'idFaseEdit_fase',
					name : 'idFaseEdit_fase',
					anchor : '50%',
					hidden : true,
					//allowBlank : false
				},{
					fieldLabel : 'Nombre de la Fase',
					id : 'nombreFaseEdit_fase',
					name : 'nombreFaseEdit_fase',
					anchor : '90%',
					allowBlank : true
				},{
					fieldLabel : 'Descripción',
					id : 'descripFaseEdit_fase',
					name : 'descripFaseEdit_fase',
					anchor : '90%',
					allowBlank : true
				},{
					xtype: 'datefield',
					fieldLabel : 'Fecha de Inicio',
					id : 'inicioFaseEdit_fase',
					name : 'inicioFaseEdit_fase',
					minValue: new Date(),
					format: 'd-F-Y',
					vtype: 'daterange',
					endDateField: 'finFaseEdit_fase',
					anchor : '90%',
					allowBlank : true
				},{
					xtype: 'datefield',
					fieldLabel : 'Fecha de Fin',
					id : 'finFaseEdit_fase',
					name : 'finFaseEdit_fase',
					minValue: new Date(),
					format: 'd-F-Y',
					vtype: 'daterange',
					startDateField: 'inicioFaseEdit_fase',
					anchor : '90%',
					allowBlank : false
				},{
					fieldLabel : 'Observacion',
					id : 'observFaseEdit_fase',
					name : 'observFaseEdit_fase',
					anchor : '90%',
					hidden : false,
					allowBlank : true,
					maxLength:'95'
				},{
					xtype : 'fieldcontainer',
					labelStyle : 'font-weight:bold;padding:0',
					items:	[
						cmbEditarTipos_Items,
					]
				}
			],
			buttons: [{
					text : 'Guardar',
					id : 'id_btn_editar_guardar_fase',
					iconCls : 'icon_button_save',
					scope : this,
					handler : this.HandlerActualizarDatosFase
				},{
					text : 'Cancelar',
					id : 'id_btn_editar_cancelar_fase',
					iconCls : 'icon_button_cancel',
					scope : this,
					handler : function(){
						this.WindowFormEditModal.close();
					}
				}
			]
		});
		
		console.log(this.grid.getSelectionModel().getSelection()[0].data.estadoFase);
		
		if (this.grid.getSelectionModel().getSelection()[0].data.estadoFase == 'ACTIVA'){
			console.log('quiero saber el estado');
			Ext.getCmp('nombreFaseEdit_fase').setDisabled(true);
			Ext.getCmp('descripFaseEdit_fase').setDisabled(true);
			Ext.getCmp('inicioFaseEdit_fase').setDisabled(true);
		}
		//Una vez creado el FormPanel lo reseteamos
		this.FormEditModal.getForm().reset();
		//Obtenemos el registro seleccionado del Grid
		registroSeleccionado = this.grid.getSelectionModel().getSelection()[0].data.idFaseEdit_fase;
		
		//setamos los valores del grit a ser editados
		Ext.getCmp('idFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.idFase);
		Ext.getCmp('nombreFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.nombreFase),
		Ext.getCmp('descripFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.descripFase),
		Ext.getCmp('inicioFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.inicioFase),
		Ext.getCmp('finFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.finFase),
		Ext.getCmp('observFaseEdit_fase').setValue(this.grid.getSelectionModel().getSelection()[0].data.observFase),
		
		
		//traemos los tipos de items que tiene el atributo que estamos editando
		Ext.Ajax.request(
		{
			url:'/fases/editarTipoItem',
			//form:"[STICK FORM ID HERE]",
			method:'GET',
			scope : this,
			params: { idProyecto: this.myIdProyecto,
					  idFase: this.grid.getSelectionModel().getSelection()[0].data.idFase},
			success: function(response, opts) {
				//alert("successfull");
				obj = Ext.decode(response.responseText)
				Ext.getCmp('id_cmbx_tipos_items').setValue(obj.tipo_item)	
				
			},
			failure:function(res,opt) {
				alert("request failed");
			}
		});
		
	
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		this.WindowFormEditModal = Ext.create('Ext.window.Window',{
			title : 'Editar registro seleccionado',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 580,
			//height : 300,
			autoHeight : true,
			modal : true,
			//resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'destroy',
			items : [this.FormEditModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormEditModal.show();
	},
	
	//método que realiza la actualización de los datos del atributo
	HandlerActualizarDatosFase:function(){
		if (this.FormEditModal.getForm().isValid()){
			//Ext.Msg.alert("Info","Actualizar los datos del formulario");
			
			var fechaIni = new Date();
				fechaIni = Ext.getCmp('inicioFaseEdit_fase').getValue();
				fechaIni = Ext.util.Format.date(fechaIni,'d-F-Y');
			
			var fechaFin = new Date();
				fechaFin = Ext.getCmp('finFaseEdit_fase').getValue();
				fechaFin = Ext.util.Format.date(fechaFin,'d-F-Y');
			
			var rec = new modelFases({
				idFase: Ext.getCmp('idFaseEdit_fase').getValue(),
				nombreFase: Ext.getCmp('nombreFaseEdit_fase').getValue(),
				descripFase: Ext.getCmp('descripFaseEdit_fase').getValue(),
				inicioFase: fechaIni,
				finFase: fechaFin,
				observFase: Ext.getCmp('observFaseEdit_fase').getValue()
			});
			
			this.FormEditModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/fases/update', //application/controllers/Habitacion.php
				clientValidation : true,
				scope : this,
				params : {
					fase : Ext.JSON.encode(rec),
					ids_tipos_items : Ext.JSON.encode(Ext.getCmp('id_cmbx_tipos_items').getValue())
				},
				success: function(form, action){
					this.WindowFormEditModal.close();
					
					Ext.MessageBox.show({
						title : 'Estatus',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.INFO,
						width : 350
					});
					
					this.store.load(
						{
							params:{idProyecto: this.myIdProyecto}
						}
					);
				},
				failure: function(form, action){
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
	
	CambiarOrdenFaseRecordSelect : function(){
	
		registroSeleccionado = this.grid.getSelectionModel().getSelection()[0].data.idFase;	
	
	
		//DataStore para el ComboBox de la lista fases
		var dsCmbFases = Ext.create('Ext.data.Store', {
			model : 'modelFases'
			//autoLoad : true
		});

		//dsCmbFases.load();

		//ComboBox para mostrar fases disponibles
		var cmbFases = Ext.create('Ext.ux.form.field.BoxSelect', {

			fieldLabel: 'Fases Contiguos',
			name : 'cmb_fases',
			id: 'id_cmbx_fases',
			displayField: 'nombreFase',
			width: 494,
			//height: 50,
			//labelWidth: 130,
			store: dsCmbFases,
			queryMode: 'local',
			emptyText: 'Seleccione la Fase por la que quiere Cambiar',
			valueField: 'idFase',
			multiSelect :false,
			allowBlank : true,
			listConfig: {
				getInnerTpl: function() {
					return '<div >{nombreFase} (Orden: {ordenFase})</div>';
				}
			}
			
		});
		
		
		
		//traemos los tipos de items que tiene el atributo que estamos editando
		Ext.Ajax.request(
		{
			url:'/fases/cambiarFase',
			//form:"[STICK FORM ID HERE]",
			method:'GET',
			scope : this,
			params: { idProyecto: this.myIdProyecto,
					  idFaseActual: this.grid.getSelectionModel().getSelection()[0].data.idFase,
					  idFaseContiguo : 0},
					  
			success: function(response, opts) {
				//alert("successfull");
				obj = Ext.decode(response.responseText)
				console.log(obj.fases)
				//Ext.getCmp('id_cmbx_fases').setValue(obj.fases)	
				dsCmbFases.loadData(obj.fases)
				
			},
			failure:function(res,opt) {
				alert("request failed");
			}
		});
		
		//Creamos el FormPanel que contendra los datos a agregar
		this.FormAddModal = Ext.create('Ext.form.Panel',{
			frame :true,
			title : 'Datos de la Fase',
			bodyStyle :'padding:5px 5px 5px 5px',
			width : 510,
			height : 100,
			defaultType: 'textfield',
			items: [
				{
					xtype : 'fieldcontainer',
					labelStyle : 'font-weight:bold;padding:0',
					anchor : '90%',
					items: [
						cmbFases,
					]
				}
			],
			buttons: [
				{
					text : 'Cambiar',
					id : 'id_btn_cambiar_fase',
					iconCls : 'icon_button_save',
					scope : this,
					handler : this.HandlerCambiarOrdenFase
				},{
					text : 'Cancelar',
					id : 'id_btn_cancelar_cambiar_fase',
					iconCls : 'icon_button_cancel',
					scope : this,
					handler : function(){
						this.WindowFormAddModal.close();
					}
				}
			]
		});
		//Una vez creado el FormPanel lo reseteamos
		this.FormAddModal.getForm().reset();
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		this.WindowFormAddModal = Ext.create('Ext.window.Window',{
			title : 'Cambiar Orden de la Fase',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 540,
			height : 155,
			modal : true,
			//resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'destroy',
			items : [this.FormAddModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormAddModal.show();
	},
	
	HandlerCambiarOrdenFase :function(){
		if (this.FormAddModal.getForm().isValid()){
			
			this.FormAddModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/fases/ordenCambiar', 
				clientValidation : true,
				scope : this,
				params : {
					idProyecto: this.myIdProyecto,
					idFaseActual : this.grid.getSelectionModel().getSelection()[0].data.idFase,
					idFaseContiguo : Ext.JSON.encode(Ext.getCmp('id_cmbx_fases').getValue())
				},
				success: function(form, action){
					this.WindowFormAddModal.close();
					this.store.load(
						{
							params:{idProyecto: this.myIdProyecto}
						}
					);
				},
				failure: function(form, action){
					Ext.Msg.alert("Error",action.result);
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
			
		}
		
	},
	
	FinalizarFaseRecordSelect : function(){
		Ext.MessageBox.show({
			title : "Información del sistema",
			msg : "¿Realmente desea Finalizar la Fase?",
			buttons : Ext.MessageBox.YESNO,
			icon : Ext.MessageBox.INFO,
			scope : this,
			fn : this.FinalizarFaseRegistroSeleccionado,
			width : 400
		});
	},
	
	
	IniciarFaseRegistroSeleccionado : function(btn){
		if (btn == 'yes') { //btn=='yes'
			//WindowAdmUsuarios.el.mask('Eliminando datos....Espere por favor...');
			
			//Ext.Msg.alert("this.grid.getSelectionModel().getSelection()[0].data.id;", this.grid.getSelectionModel().getSelection()[0].data.id);
			
			
			
			registroSeleccionado = this.grid.getSelectionModel().getSelection()[0].data.idFase;
			Ext.Ajax.request({
				url : '/fases/iniciarFase', //application/controllers/Habitacion.php
				method : 'POST',
				scope : this,
				params : {
					param_ini : registroSeleccionado
				},
				success: function(response, opts) { //success
					var obj = Ext.JSON.decode(response.responseText);
					if(obj.success==true){
						
						// la alerta de si se inicia o no la fase
						this.store.load();
						Ext.Msg.alert('Estatus',  obj.msg);
						
						
						//this.WindowAdmUsuarios.el.unmask();
					}
					else if(obj.success==false){
						//this.WindowAdmUsuarios.el.unmask();
							Ext.MessageBox.show({
								title : "Informacion del sistema",
								msg : obj.msg,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR,
								width : 400
							});
					}
					else{
						//this.WindowAdmUsuarios.el.unmask();
						Ext.MessageBox.show({
							title : "Informacion del sistema",
							msg : "Mensaje de error alternativo a la eliminacion del registro seleccionado",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					}
				}, //success
				failure: function(response, opts) { //failure
					//this.WindowAdmUsuarios.el.unmask();
					var obj = Ext.JSON.decode(response.responseText);
						Ext.MessageBox.show({
							title : "Informacion del sitema",
							msg : "Error de conexion al servidor de la base de datos",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					} //failure
				});
		}else{
	
		}
	},
	
		FinalizarFaseRegistroSeleccionado : function(btn){
		if (btn == 'yes') { //btn=='yes'
			//WindowAdmUsuarios.el.mask('Eliminando datos....Espere por favor...');
			
			//Ext.Msg.alert("this.grid.getSelectionModel().getSelection()[0].data.id;", this.grid.getSelectionModel().getSelection()[0].data.id);
			
			
			
			registroSeleccionado = this.grid.getSelectionModel().getSelection()[0].data.idFase;
			Ext.Ajax.request({
				url : '/fases/finalizarFase', //application/controllers/Habitacion.php
				method : 'POST',
				scope : this,
				params : {
					param_fin : registroSeleccionado
				},
				success: function(response, opts) { //success
					var obj = Ext.JSON.decode(response.responseText);
					if(obj.success==true){
						
						// la alerta de si se inicia o no la fase
						this.store.load();
						Ext.Msg.alert('Estatus',  obj.msg);
						
						
						//this.WindowAdmUsuarios.el.unmask();
					}
					else if(obj.success==false){
						//this.WindowAdmUsuarios.el.unmask();
							Ext.MessageBox.show({
								title : "Informacion del sistema",
								msg : obj.msg,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR,
								width : 400
							});
					}
					else{
						//this.WindowAdmUsuarios.el.unmask();
						Ext.MessageBox.show({
							title : "Informacion del sistema",
							msg : "Mensaje de error alternativo a la eliminacion del registro seleccionado",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					}
				}, //success
				failure: function(response, opts) { //failure
					//this.WindowAdmUsuarios.el.unmask();
					var obj = Ext.JSON.decode(response.responseText);
						Ext.MessageBox.show({
							title : "Informacion del sitema",
							msg : "Error de conexion al servidor de la base de datos",
							buttons : Ext.MessageBox.OK,
							icon : Ext.MessageBox.ERROR,
							width : 400
						});
					} //failure
				});
		}else{
	
		}
	},
});
